0001 0000 ;------------------------------------------------------ 0002 0000 ; 0003 0000 ; Monitor multi-firmware per start-up 0004 0000 ; computer Z80 Nuova Elettronica 0005 0000 ; 0006 0000 ; Copyright Roberto Bazzano 2006 - 2024 0007 0000 ; 0008 0000 ;------------------------------------------------------ 0009 0000 ; 0010 0000 ; BANCHI 2 e 3 - Allocati da F800h a FFFFh 0011 0000 ; 0012 0000 ; NOTA: durante tutto il codice il registro B' contiene 00h se c'è la scheda video vecchia. Se non c'è contiene FFh 0013 0000 ; Il registro C' contiene il numero della pagina di menù visualizzata a video 0014 0000 ; Il registro D' se <> 00h indica che la routine "input" deve controllare anche il backspace (utilizzato dal programma di test della ram) 0015 0000 ; NOTA: I registri alternativi non vengono utilizzati dai monitor esadecimali 0016 0000 ; 0017 0000 ;------------------------------------------------------ 0018 0000 ; 0019 0000 ; CHANGELOG: 0020 0000 ; Rel. 1.3: inserito controllo presenza schede video 0021 0000 ; 09/01/2023 0022 0000 ; 0023 0000 ; Rel. 1.4: aggiunte voci di menù S1 e S2 0024 0000 ; 01/11/2024 spostato parte del codice in monitor1.asm 0025 0000 ; aggiunti entry point nell jump table iniziale 0026 0000 ; 0027 0000 ; Rel. 1.5: eliminata voce di menù "E" (restart a 1000h) e shift delle voci successive indietro 0028 0000 ; 20/11/2024 aggiunta voce di menù S2 (basic Microsoft AG4) 0029 0000 ; modificata voce di menù D in "JUMP A INDIRIZZO" con richiesta indirizzo esadecimale a cui saltare 0030 0000 ; 0031 0000 ; Rel. 1.6: aggiunto disassembler della eprom AG3 0032 0000 ; 21/11/2024 0033 0000 ; 0034 0000 ; Rel. 1.7: aggiunta richiesta banco da mappare per la funzione di menù "D" 0035 0000 ; 22/11/2024 0036 0000 ; 0037 0000 ; Rel. 1.8: corretto bug che mandava in crash la funzione "conversione floppy" 0038 0000 ; 25/11/2024 modificata funzione "prova tastiera". Ora visualizza su entrambi i video e gestisce i tasti BREAK 0039 0000 ; 0040 0000 ; Rel. 1.9: modificato test della ram per aumentare le performance. 0041 0000 ; 27/04/2025 Ora l'indirizzo in fase di test viene visualizzato solo ogni 0100h bytes 0042 0000 ; 0043 0000 0044 0000 banco .equ 05fh ; porta di I/O per la selezione del banco di memoria della EPROM 0045 0000 0046 0000 ;------------------------------------------------------ 0047 0000 ; ROUTINES ED INDIRIZZI DI MONITOR1.ASM 0048 0000 ;------------------------------------------------------ 0049 0000 0050 0000 menu1 .equ 0f000h 0051 0000 menu2 .equ 0f200h 0052 0000 menu3 .equ 0f400h 0053 0000 curs .equ 0f5f0h 0054 0000 0055 0000 0056 0000 ;------------------------------------------------------ 0057 0000 ; INDIRIZZI E JUMP TABLE DI TESTRAM4.ASM 0058 0000 ;------------------------------------------------------ 0059 0000 0060 0000 ; Indirizzi working area 0061 0000 cursd .equ 000fch ; posizione del cursore sui display 0062 0000 0063 0000 ; Jump table 0064 0000 inizio .equ 0F000h ; inizio programma 0065 0000 vis .equ 0F003h ; visualizza il messaggio puntato da HL 0066 0000 inp .equ 0F006h ; input dell'indirizzo di 4 caratteri in HL 0067 0000 0068 0000 0069 0000 ;------------------------------------------------------ 0070 0000 0071 0000 0072 F800 .org 0f800h 0073 F800 0074 F800 ; JUMP table 0075 F800 C3 42 F8 jp start ; F800h inizio firmware 0076 F803 C3 F8 FB jp input ; F803h routine input da tastiere per monitor esadecimale 0077 F806 C3 C8 FC jp video ; F806h routine output video per monitor esadecimale (visualizza su monitor vecchio, nuovo, e display tastiera esadecimale) 0078 F809 C3 BE FD jp lf0a5 ; F809h routine f0a5h identica a quella della eprom 2390 (inizializza i registri del SY6545 ed i PIO) 0079 F80C C3 99 FD jp lf060 ; F80Ch routine f060h identica a quella della eprom 2390 (carica in R14, R15, R18 e R19 l'indirizzo (HL) del cursore e del carattere da visualizzare) 0080 F80F C3 A9 FD jp lf06e ; F80Fh routine f06eh identica a quella della eprom 2390 (carica in R18 e R19 l'indirizzo (HL) del carattere da visualizzare) 0081 F812 C3 D8 FA jp checv ; F812h routine calcolo presenza scheda video vecchia 0082 F815 C3 F6 FA jp chect ; F815h routine controllo presenza scheda video vecchia 0083 F818 C3 16 FB jp waitv ; F818h routine di attesa ritraccia video vecchio 0084 F81B C3 AB FB jp waitn ; F81Bh routine di attesa ritraccia video nuovo 0085 F81E C3 98 FB jp writen ; F81Eh routine di scrittura carattere sul video nuovo 0086 F821 C3 3F FB jp cursor ; F821h routine di accensione/spegnimento cursore sul video nuovo 0087 F824 C3 B4 FB jp vloc ; F824h calcola la locazione del video vecchio in base alla riga/colonna nella locazione puntata da HL e HL+1 per il video vecchio 0088 F827 C3 C6 FB jp nloc ; F827h calcola la locazione del video nuovo in base alla riga/colonna nella locazione puntata da HL e HL+1 per il video nuovo 0089 F82A C3 BB FB jp vloc1 ; F82Ah calcola la locazione del video vecchio in base alla riga/colonna contenute in BC 0090 F82D C3 CD FB jp nloc1 ; F82Dh calcola la locazione del video nuovo in base alla riga/colonna contenute in BC 0091 F830 C3 FF FA jp initv ; F830h pulizia video vecchio 0092 F833 C3 24 FB jp initn ; F833h pulizia video nuovo 0093 F836 C3 0E FE jp ctabdi ; F836h calcola l'indirizzo della tabella TABDIS, per la conversione dei valori da visualizzare sui display, e lo ritorna in HL 0094 F839 C3 6A FD jp vdisp ; F839h visualizza un messaggio puntato da HL sui display 0095 F83C C3 88 FD jp vdispc ; F83Ch visualizza il carattere contenuto in A sul display puntato da C, convertendolo nel formato compatibile con i caratteri dei display 0096 F83F C3 9B FB jp write1 ; F83Fh routine di scrittura carattere sul video nuovo senza attendere la ritraccia video 0097 F842 0098 F842 0099 F842 F3 start: di ; disabilita gli interrupt 0100 F843 21 ED 45 ld hl,045edh ; inizializza il vettore per l'NMI 0101 F846 22 66 00 ld (0066h),hl ; mettendo l'istruzione RETN (ED 45) 0102 F849 0103 F849 AF xor a ; spegne il motore del floppy 0104 F84A D3 D6 out (0d6h),a 0105 F84C 0106 F84C D9 exx ; inizializza il registro D' in modo che l'input da tastiera NON controlli anche il backspace 0107 F84D 57 ld d,a 0108 F84E D9 exx 0109 F84F 0110 F84F 3E 28 ld a,28h ; seleziona il banco con le subroutines. IMPORTANTE: questo banco deve rimanere sempre selezionato durante l'esecuzione del monitor multifirmware 0111 F851 D3 5F out (banco),a 0112 F853 0113 F853 ;------------------------------------------------------ 0114 F853 ; Lancia test ram se al boot è stato premuto ESC (sulle tastiere alfanumeriche) o CTRL+F (sulla tastiera esadecimale) 0115 F853 ;------------------------------------------------------ 0116 F853 0117 F853 3E CF ld a,0cfh ; inizializza il PIO 1/B (tastiera) 0118 F855 D3 87 out (87h),a 0119 F857 AF xor a 0120 F858 3D dec a 0121 F859 D3 87 out (87h),a 0122 F85B 0123 F85B tram1: ; controlla se esiste la scheda video vecchia 0124 F85B 21 00 00 ld hl,00000h ; inizializza il contatore 0125 F85E 0126 F85E 23 tram2: inc hl ; attende al massimo fino a che HL non diventa 1000h 0127 F85F 7C ld a,h ; infatti la ritraccia a "1" come tempo resta al massimo con HL a 0111h 0128 F860 FE 10 cp 10h ; se impiega più tempo significa che la scheda LX.388 non è presente 0129 F862 28 14 jr z,tram3 ; ha superato il timeout, quindi la scheda video vecchia non c'è 0130 F864 0131 F864 DB EB in a,(0ebh) ; controlla se c'è la ritraccia video 0132 F866 CB 7F bit 7,a 0133 F868 20 F4 jr nz,tram2 ; ritraccia non trovata, looppa 0134 F86A 0135 F86A 21 00 30 ld hl,03000h ; fa un ritardo per permettere alle tastiere di assestarsi all'accensione o al reset 0136 F86D 2B tram2a: dec hl 0137 F86E 7C ld a,h 0138 F86F B5 or l 0139 F870 20 FB jr nz,tram2a 0140 F872 0141 F872 DB EA in a,(0eah) ; controlla se c'è un tasto premuto sulla tastiera vecchia 0142 F874 CB 7F bit 7,a 0143 F876 20 17 jr nz,tram5 ; tasto premuto sulla tastiera vecchia 0144 F878 0145 F878 DB 85 tram3: in a,(085h) ; controlla se c'è un tasto premuto sulla tastiera nuova 0146 F87A 2F cpl 0147 F87B CB 7F bit 7,a 0148 F87D 20 10 jr nz,tram5 ; tasto premuto sulla tastiera nuova 0149 F87F 0150 F87F 01 FF 01 ld bc,01ffh ; controlla se c'è un tasto premuto sulla tastiera esadecimale 0151 F882 DB F0 tram4: in a,(0f0h) ; fa 255 input. Quello che è il bin 7 a 0 è il tasto premuto (a causa del contatore hardware che fa lo scan dei tasti) 0152 F884 CB 7F bit 7,a 0153 F886 28 24 jr z,tram8 ; tasto premuto sulla tastiera esadecimale 0154 F888 0B dec bc 0155 F889 78 ld a,b 0156 F88A B1 or c 0157 F88B 20 F5 jr nz,tram4 0158 F88D 0159 F88D 18 21 jr sp0 ; nessun tasto premuto 0160 F88F 0161 F88F E6 7F tram5: and 7fh ; controlla se è stato premuto ESC su una tastiera alfanumerica 0162 F891 FE 1B cp 01bh 0163 F893 20 1B jr nz,sp0 0164 F895 0165 F895 21 AE FE tram6: ld hl,out11 ; visualizza "test ram" sui display 0166 F898 01 F7 08 ld bc,08F7h 0167 F89B 7E tram7: ld a,(hl) 0168 F89C ED 79 out (c),a 0169 F89E 23 inc hl 0170 F89F 0D dec c 0171 F8A0 05 dec b 0172 F8A1 AF xor a 0173 F8A2 B8 cp b 0174 F8A3 20 F6 jr nz,tram7 0175 F8A5 0176 F8A5 3E 26 ld a,26h ; seleziona il banco del programma per il test della ram 0177 F8A7 D3 5F out (banco),a 0178 F8A9 C3 00 F0 jp 0f000h ; salta al programma per il test della ram 0179 F8AC 0180 F8AC FE 1F tram8: cp 01fh ; controlla se è stato premuto CTRL+F sulla tastiera esadecimale 0181 F8AE 28 E5 jr z,tram6 0182 F8B0 0183 F8B0 ;------------------------------------------------------ 0184 F8B0 0185 F8B0 21 FF EB sp0: ld hl,0ebffh ; cerca dove posizionare lo SP prima di EC00 0186 F8B3 7E sp1: ld a,(hl) 0187 F8B4 2F cpl 0188 F8B5 77 ld (hl),a 0189 F8B6 BE cp (hl) 0190 F8B7 28 03 jr z,sp3 0191 F8B9 2B sp2: dec hl 0192 F8BA 18 F7 jr sp1 0193 F8BC 2F sp3: cpl 0194 F8BD 77 ld (hl),a 0195 F8BE BE cp (hl) 0196 F8BF 20 F8 jr nz,sp2 0197 F8C1 2B dec hl ; lo SP deve avere almeno una locazione di ram scrivibile dopo di lui, altrimenti EX (SP),HL non funziona 0198 F8C2 F9 ld sp,hl 0199 F8C3 0200 F8C3 CD BE FD call lf0a5 ; inizializza i registri del SY6545 ed i PIO 0201 F8C6 0202 F8C6 CD D8 FA call checv ; imposta il registro B' che indica se esiste la scheda video vecchia 0203 F8C9 0204 F8C9 21 58 FE tast0: ld hl,out0 ; visualizza il messaggio "SELECT" sui display 0205 F8CC CD 6A FD call vdisp 0206 F8CF 0207 F8CF CD 48 FB call vmenu1 ; pulisce i video e visualizza il menù 0208 F8D2 0209 F8D2 CD F8 FB tast0a: call input ; input da tastiere 0210 F8D5 F5 push af ; salva il numero digitato 0211 F8D6 0212 F8D6 FE 10 cp 10h 0213 F8D8 28 2E jr z,tast0c ; se è stato premuto CR salta subito al controllo del tasto 0214 F8DA 0215 F8DA FE 14 cp 14h ; se è maggiore di SHIFT+3 looppa 0216 F8DC 30 F4 jr nc,tast0a 0217 F8DE FE 01 cp 01h ; se è minore di 1 looppa 0218 F8E0 38 F0 jr c,tast0a 0219 F8E2 0220 F8E2 21 F0 F5 ld hl,curs ; calcola la posizione sul video vecchio per visualizzare il numero digitato 0221 F8E5 CD B4 FB call vloc ; calcola in DE l'indirizzo del video in base alla riga/colonna nella locazione puntata da HL e HL+1 0222 F8E8 0223 F8E8 FE 11 cp 11h ; confronta il numero digitato con 11h 0224 F8EA CD 91 FA call convnu ; converte il numero nei caratteri che rappresentano la voce di menù (AF non viene toccato) 0225 F8ED 30 07 jr nc,tast0b ; se il numero digitato è >=11h e quindi deve visualizzare due caratteri va a tast0b 0226 F8EF 0227 F8EF 7D ld a,l ; recupera il carattere da visualizzare 0228 F8F0 12 ld (de),a ; visualizza il carattere sul video vecchio 0229 F8F1 CD 98 FB call writen ; e sul video nuovo - Il cursore è già posizionato 0230 F8F4 18 12 jr tast0c 0231 F8F6 0232 F8F6 7C tast0b: ld a,h ; recupera il primo carattere da visualizzare 0233 F8F7 12 ld (de),a ; visualizza il primo carattere sul video vecchio 0234 F8F8 CD 98 FB call writen ; e sul video nuovo - Il cursore è già posizionato 0235 F8FB 13 inc de ; punta alla posizione del successivo carattere a video 0236 F8FC 7D ld a,l ; recupera il secondo carattere da visualizzare 0237 F8FD 12 ld (de),a ; visualizza il secondo carattere sul video vecchio 0238 F8FE CD 98 FB call writen ; e sul video nuovo - Il cursore è già posizionato 0239 F901 0240 F901 13 inc de ; punta alla posizione del successivo carattere a video 0241 F902 3E 3C ld a,'<' ; visualizza il carattere "<" 0242 F904 12 ld (de),a ; sul video vecchio 0243 F905 CD 98 FB call writen ; e sul video nuovo - Il cursore è già posizionato 0244 F908 0245 F908 F1 tast0c: pop af ; ripristina il numero digitato 0246 F909 0247 F909 21 12 FE ld hl,tabtas ; calcola il puntatore all'indirizzo della routine presente nella tabella TABTAS e ci salta 0248 F90C C3 A7 FA jp punt 0249 F90F 0250 F90F tast1: ; se 1 lancia il boot del basic da 5.5 K 0251 F90F 21 96 FE ld hl,out8 ; messaggio da visualizzare sul display 0252 F912 CD B8 FA call disp ; visualizza il messaggio sui display e inizializza i video 0253 F915 3E 19 ld a,19h ; seleziona il banco del basic da 5.5 K su floppy 0254 F917 D3 5F out (banco),a 0255 F919 C3 00 F0 jp 0f000h 0256 F91C 0257 F91C tast2: ; se 2 lancia il boot vecchio 0258 F91C 21 60 FE ld hl,out1 ; messaggio da visualizzare sul display 0259 F91F CD B8 FA call disp ; visualizza il messaggio sui display e inizializza i video 0260 F922 3E 00 ld a,00h ; seleziona il banco della 1390 0261 F924 D3 5F out (banco),a 0262 F926 C3 00 F0 jp 0f000h 0263 F929 0264 F929 tast3: ; se 3 lancia il boot grafic 0265 F929 21 69 FE ld hl,out2 ; messaggio da visualizzare sul display 0266 F92C CD B8 FA call disp ; visualizza il messaggio sui display e inizializza i video 0267 F92F 3E 01 ld a,01h ; seleziona il banco della 2390 0268 F931 D3 5F out (banco),a 0269 F933 C3 00 F0 jp 0f000h 0270 F936 0271 F936 tast4: ; se 4 lancia il boot del S.O.N.E. 0272 F936 21 9F FE ld hl,out9 ; messaggio da visualizzare sul display 0273 F939 CD B8 FA call disp ; visualizza il messaggio sui display e inizializza i video 0274 F93C 3E 1A ld a,1Ah ; seleziona il banco del s.o.n.e. 0275 F93E D3 5F out (banco),a 0276 F940 C3 00 F0 jp 0f000h 0277 F943 0278 F943 tast5: ; se 5 lancia il basic in rom rilocato in ram 0279 F943 21 72 FE ld hl,out3 ; messaggio da visualizzare sul display 0280 F946 CD B8 FA call disp ; visualizza il messaggio sui display e inizializza i video 0281 F949 3E 08 ld a,08h ; seleziona il primo banco del basic in rom 0282 F94B 11 00 00 ld de,00000h ; seleziona l'indirizzo di destinazione 0283 F94E 06 08 ld b,08h ; seleziona il numero di banchi da spostare 0284 F950 CD C7 FA call setban ; sposta gli 8 banchi da 2K in ram 0285 F953 C3 00 00 jp 0000h ; salta al basic 0286 F956 0287 F956 tast6: ; se 6 lancia il monitor esadecimale originale non rilocato 0288 F956 CD BB FA call disp1 ; non visualizza alcun messaggio sui display e inizializza i video 0289 F959 3E 04 ld a,04h ; seleziona il banco del monitor esadecimale originale 0290 F95B 11 00 80 ld de,08000h ; seleziona l'indirizzo di destinazione 0291 F95E 06 01 ld b,01h ; seleziona il numero di banchi da spostare 0292 F960 CD C7 FA call setban ; sposta il banco in ram 0293 F963 C3 00 80 jp 8000h 0294 F966 0295 F966 tast7: ; se 7 lancia il monitor esadecimale non rilocato con lo SP rilocato prima di EC00 con il firmware non rilocato per il programmatore di eprom 0296 F966 CD BB FA call disp1 ; non visualizza alcun messaggio sui display e inizializza i video 0297 F969 3E 20 ld a,20h ; seleziona il banco del monitor esadecimale con SP rilocato 0298 F96B 11 00 80 ld de,08000h ; seleziona l'indirizzo di destinazione 0299 F96E 06 01 ld b,01h ; seleziona il numero di banchi da spostare 0300 F970 CD C7 FA call setban ; sposta il banco in ram 0301 F973 C3 00 80 jp 8000h 0302 F976 0303 F976 tast8: ; se 8 lancia il monitor esadecimale rilocato con lo SP rilocato prima di EC00 per la tastiera alfanumerica con il firmware rilocato per il programmatore di eprom 0304 F976 CD BB FA call disp1 ; non visualizza alcun messaggio sui display e inizializza i video 0305 F979 3E 1C ld a,1Ch ; seleziona il banco del monitor esadecimale rilocato per la tastiera alfanumerica 0306 F97B D3 5F out (banco),a 0307 F97D C3 00 F0 jp 0f000h 0308 F980 0309 F980 tast9: ; se 9 lancia il monitor esadecimale rilocato con lo SP rilocato prima di EC00 per la tastiera esadecimale con il firmware rilocato per il programmatore di eprom 0310 F980 CD BB FA call disp1 ; non visualizza alcun messaggio sui display e inizializza i video 0311 F983 3E 1E ld a,1Eh ; seleziona il banco del monitor esadecimale rilocato per la tastiera esadecimale 0312 F985 D3 5F out (banco),a 0313 F987 C3 00 F0 jp 0f000h 0314 F98A 0315 F98A tastA: ; se A lancia direttamente il bootstrap multiplo 0316 F98A 21 83 FE ld hl,out5 ; messaggio da visualizzare sul display 0317 F98D CD B8 FA call disp ; visualizza il messaggio sui display e inizializza i video 0318 F990 3E 06 ld a,06h ; seleziona il banco della 2390 modificata per non fare il check sul disco di boot 0319 F992 D3 5F out (banco),a 0320 F994 C3 7D F1 jp 0f17dh ; salta direttamente al BOOT 0321 F997 0322 F997 tastB: ; se B lancia il loader del basic da 5.5 K 0323 F997 CD BB FA call disp1 ; non visualizza alcun messaggio sui display e inizializza i video 0324 F99A 3E 04 ld a,04h ; seleziona il banco del monitor esadecimale originale 0325 F99C 11 00 80 ld de,08000h ; seleziona l'indirizzo di destinazione 0326 F99F 06 01 ld b,01h ; seleziona il numero di banchi da spostare 0327 F9A1 CD C7 FA call setban ; sposta il banco in ram 0328 F9A4 0329 F9A4 3E 18 ld a,18h ; seleziona il banco del loader del basic da 5.5 K su cassetta 0330 F9A6 11 00 00 ld de,00000h ; seleziona il banco indicato da A e lo sposta in ram 0331 F9A9 06 01 ld b,01h ; seleziona il numero di banchi da spostare 0332 F9AB CD C7 FA call setban ; sposta il banco in ram 0333 F9AE C3 69 00 jp 0069h ; salta al loader 0334 F9B1 0335 F9B1 tastC: ; se C lancia la prova tastiera 0336 F9B1 21 8A FE ld hl,out6 ; messaggio da visualizzare sul display 0337 F9B4 CD B8 FA call disp ; visualizza il messaggio sui display e inizializza i video 0338 F9B7 3E 24 ld a,24h ; seleziona il banco del programma con la prova tastiera 0339 F9B9 D3 5F out (banco),a 0340 F9BB C3 00 F0 jp 0f000h 0341 F9BE 0342 F9BE tastD: ; se D salta all'indirizzo indicato 0343 F9BE 3E 01 ld a,01h ; imposta il registro D', che indica che l'input da tastiera deve controllare anche il BACKSPACE 0344 F9C0 D9 exx 0345 F9C1 57 ld d,a 0346 F9C2 D9 exx 0347 F9C3 0348 F9C3 3E 20 ld a,20h ; Spegne il cursore sul video nuovo 0349 F9C5 CD 3F FB call cursor 0350 F9C8 CD FF FA call initv ; Inizializza il video vecchio 0351 F9CB CD 24 FB call initn ; Inizializza il video nuovo 0352 F9CE 0353 F9CE 3E 26 ld a,26h ; seleziona il banco del programma per il test della ram, che contiene le routine necessarie alla funzione "vis" e "inp" 0354 F9D0 D3 5F out (banco),a 0355 F9D2 21 3E FE ld hl,msgban ; visualizza "BANCO: " sui video 0356 F9D5 11 C9 FE ld de,outban ; messaggio da visualizzare sul display ("banco.") 0357 F9D8 CD 03 F0 call vis ; visualizza il messaggio puntato da HL 0358 F9DB 0359 F9DB 3E F1 ld a,0f1h ; imposta la posizione sui display 0360 F9DD 32 FC 00 ld (cursd),a 0361 F9E0 16 02 ld d,02h ; numero di caratteri in input 0362 F9E2 CD 06 F0 call inp ; input del banco in HL 0363 F9E5 E5 push hl ; salva il numero del banco nello stack 0364 F9E6 0365 F9E6 21 49 FE ld hl,msgadr ; visualizza "INDIRIZZO: " sui video 0366 F9E9 11 CF FE ld de,outadr ; messaggio da visualizzare sul display ("ind.") 0367 F9EC CD 03 F0 call vis ; visualizza il messaggio puntato da HL 0368 F9EF 0369 F9EF 3E F3 ld a,0f3h ; imposta la posizione sui display 0370 F9F1 32 FC 00 ld (cursd),a 0371 F9F4 16 04 ld d,04h ; numero di caratteri in input 0372 F9F6 CD 06 F0 call inp ; input dell'indirizzo in HL 0373 F9F9 0374 F9F9 D1 pop de ; recupera il numero del banco 0375 F9FA E5 push hl ; salva l'indirizzo digitato nello stack 0376 F9FB 0377 F9FB 21 91 FE ld hl,out7 ; messaggio da visualizzare sul display 0378 F9FE CD B8 FA call disp ; visualizza il messaggio sui display e inizializza i video 0379 FA01 0380 FA01 7B ld a,e ; recupera il banco da selezionare 0381 FA02 CB 3F srl a 0382 FA04 CB 3F srl a 0383 FA06 CB 3F srl a 0384 FA08 CB 3F srl a 0385 FA0A 0E F2 ld c,0f2h ; imposta la posizione sui display 0386 FA0C CD 88 FD call vdispc ; visualizza il carattere sui display 0387 FA0F 0388 FA0F 7B ld a,e ; recupera il banco da selezionare 0389 FA10 E6 0F and 0fh ; visualizza il secondo carattere del banco sui display 0390 FA12 0E F1 ld c,0f1h ; imposta la posizione sui display 0391 FA14 CD 88 FD call vdispc ; visualizza il carattere sui display 0392 FA17 0393 FA17 7B ld a,e ; recupera il banco da selezionare 0394 FA18 D3 5F out (banco),a ; seleziona il banco richiesto 0395 FA1A 0396 FA1A E1 pop hl ; recupera l'indirizzo a cui saltare 0397 FA1B E9 jp (hl) ; salta all'indirizzo richiesto 0398 FA1C 0399 FA1C tastE: ; se E carica le routines di stampa per monitor esadecimale a 0070 0400 FA1C 3E 07 ld a,07h ; seleziona il banco delle routines di stampa 0401 FA1E 11 70 00 ld de,00070h ; seleziona l'indirizzo di destinazione 0402 FA21 06 01 ld b,01h ; seleziona il numero di banchi da spostare 0403 FA23 CD C7 FA call setban ; sposta il banco in ram 0404 FA26 0405 FA26 3E 28 ld a,28h ; ripristina la selezione del banco delle subroutines 0406 FA28 D3 5F out (banco),a 0407 FA2A C3 C9 F8 jp tast0 0408 FA2D 0409 FA2D tast10: ; se RETURN cambia pagina di menù 0410 FA2D D9 exx ; carica il numero di pagina visualizzata in A 0411 FA2E 79 ld a,c 0412 FA2F D9 exx 0413 FA30 0414 FA30 3C inc a ; punta alla pagina successiva 0415 FA31 FE 04 cp 04h ; se è minore di 4 va bene 0416 FA33 38 02 jr c,tast1a 0417 FA35 3E 01 ld a,01h ; altrimenti carica la prima pagina 0418 FA37 0419 FA37 21 38 FE tast1a: ld hl,tabmen ; calcola il puntatore all'indirizzo della routine presente nella tabella TABMEN e ci salta 0420 FA3A CD A7 FA call punt ; effettua una CALL anziché un JP perché le routines vmenu1-2-3 escono con un RET 0421 FA3D 0422 FA3D C3 D2 F8 jp tast0a ; ritorna all'input da tastiera 0423 FA40 0424 FA40 tastF: ; se F lancia il programma per la conversione dei datamark dei floppy 0425 FA40 21 A6 FE ld hl,out10 ; messaggio da visualizzare sul display 0426 FA43 CD B8 FA call disp ; visualizza il messaggio sui display e inizializza i video 0427 FA46 3E 22 ld a,22h ; seleziona il banco del monitor esadecimale rilocato per la tastiera alfanumerica 0428 FA48 D3 5F out (banco),a 0429 FA4A C3 00 F0 jp 0f000h 0430 FA4D 0431 FA4D tastS1: ; se SHIFT+1 lancia il programma per il test della ram 0432 FA4D 21 AE FE ld hl,out11 ; messaggio da visualizzare sul display 0433 FA50 CD B8 FA call disp ; visualizza il messaggio sui display e inizializza i video 0434 FA53 3E 26 ld a,26h ; seleziona il banco del programma per il test della ram 0435 FA55 D3 5F out (banco),a 0436 FA57 C3 00 F0 jp 0f000h 0437 FA5A 0438 FA5A tastS2: ; se SHIFT+2 lancia il basic Microsoft AG4 0439 FA5A 21 B7 FE ld hl,out12 ; messaggio da visualizzare sul display 0440 FA5D CD B8 FA call disp ; visualizza il messaggio sui display e inizializza i video 0441 FA60 0442 FA60 CD E6 FB call stack ; cerca dove posizionare lo SP prima di C000, altrimenti lo SP ricopre il basic che è allocato da C000h a DFFFh 0443 FA63 F9 ld sp,hl 0444 FA64 0445 FA64 3E 2A ld a,2ah ; seleziona il primo banco del basic AG4 in rom 0446 FA66 11 00 C0 ld de,0c000h ; seleziona l'indirizzo di destinazione 0447 FA69 06 04 ld b,04h ; seleziona il numero di banchi da spostare 0448 FA6B CD C7 FA call setban ; sposta i 4 banchi da 2K in ram 0449 FA6E 0450 FA6E 3E C3 ld a,0c3h ; carica l'istruzione JUMP per l'NMI 0451 FA70 32 66 00 ld (0066h),a 0452 FA73 0453 FA73 3E 19 ld a,19h ; seleziona il banco del basic da 5.5 K su floppy, che (probabilmente) era utilizzato insieme al basic AG4 0454 FA75 D3 5F out (banco),a 0455 FA77 0456 FA77 C3 40 DF jp 0df40h ; salta al basic AG4 - Viene utilizzato lo SP dove si trova ora 0457 FA7A 0458 FA7A tastS3: ; se SHIFT+3 lancia il basic Microsoft AG3 0459 FA7A 21 C0 FE ld hl,out13 ; messaggio da visualizzare sul display 0460 FA7D CD B8 FA call disp ; visualizza il messaggio sui display e inizializza i video 0461 FA80 0462 FA80 CD E6 FB call stack ; cerca dove posizionare lo SP prima di C000, altrimenti lo SP ricopre il monitor che è allocato da D000h a DFFFh 0463 FA83 F9 ld sp,hl 0464 FA84 0465 FA84 3E 32 ld a,32h ; seleziona il primo banco del disassembler AG3 in rom 0466 FA86 11 00 D0 ld de,0d000h ; seleziona l'indirizzo di destinazione 0467 FA89 06 02 ld b,02h ; seleziona il numero di banchi da spostare 0468 FA8B CD C7 FA call setban ; sposta i 2 banchi da 2K in ram 0469 FA8E 0470 FA8E C3 00 D0 jp 0d000h ; salta al disassembler AG3 0471 FA91 0472 FA91 ;------------------------------------------------------ 0473 FA91 ; converte il numero nella voce di menù 0474 FA91 ; ritorna HL contentente i due caratteri da visualizzare che sono blank+numero, oppure S+numero 0475 FA91 0476 FA91 26 20 convnu: ld h,020h ; 020h=blank 0477 FA93 0478 FA93 F5 push af ; visualizza il numero digitato 0479 FA94 FE 10 cp 010h ; se A < 010h 0480 FA96 38 04 jr c,convn1 0481 FA98 0482 FA98 26 53 ld h,053h ; 053h="S" - converte in "S"+numero 0483 FA9A D6 10 sub 010h 0484 FA9C 0485 FA9C FE 0A convn1: cp 0Ah 0486 FA9E 38 02 jr c,convn2 ; se A < 0ah addiziona 30h, altrimenti addiziona 07h quindi addiziona 30h 0487 FAA0 C6 07 add a,07h ; il risultato è che se A >= 0ah addiziona 037h, altrimenti 030h 0488 FAA2 C6 30 convn2: add a,030h 0489 FAA4 6F ld l,a 0490 FAA5 0491 FAA5 F1 pop af 0492 FAA6 C9 ret 0493 FAA7 0494 FAA7 ;------------------------------------------------------ 0495 FAA7 ; calcola il puntatore ad una tabella di jump presente in HL e salta 0496 FAA7 0497 FAA7 punt: 0498 FAA7 F5 push af 0499 FAA8 C5 push bc 0500 FAA9 0501 FAA9 3D dec a ; decrementa A, lo moltiplica per 2 e lo addiziona ad HL 0502 FAAA CB 27 sla a 0503 FAAC 4F ld c,a 0504 FAAD AF xor a 0505 FAAE 47 ld b,a 0506 FAAF 09 add hl,bc ; HL ora punta all'indirizzo da richiamare che è presente nella tabella 0507 FAB0 4E ld c,(hl) ; carica il contenuto dell'indirizzo puntato da HL in BC 0508 FAB1 23 inc hl 0509 FAB2 46 ld b,(hl) 0510 FAB3 C5 push bc ; sposta BC su HL 0511 FAB4 E1 pop hl 0512 FAB5 0513 FAB5 C1 pop bc 0514 FAB6 F1 pop af 0515 FAB7 E9 jp (hl) ; salta alla routine calcolata 0516 FAB8 0517 FAB8 ;------------------------------------------------------ 0518 FAB8 ; visualizza il messaggio sui display, spegne il cursore sul video nuovo e inizializza i video 0519 FAB8 ; Se HL=0 non visualizza il messaggio sui display 0520 FAB8 ; Sporca AF 0521 FAB8 0522 FAB8 CD 6A FD disp: call vdisp ; Visualizza il messaggio indicato da HL sui display 0523 FABB 3E 20 disp1: ld a,20h ; Spegne il cursore sul video nuovo 0524 FABD CD 3F FB call cursor 0525 FAC0 CD FF FA call initv ; Inizializza il video vecchio 0526 FAC3 CD 24 FB call initn ; Inizializza il video nuovo 0527 FAC6 C9 ret 0528 FAC7 0529 FAC7 ;------------------------------------------------------ 0530 FAC7 ; Seleziona il banco indicato da A e lo sposta all'indirizzo indicato da DE 0531 FAC7 ; Sposta il numero di banchi indicati da B 0532 FAC7 ; Sporca tutti i registri 0533 FAC7 0534 FAC7 C5 setban: push bc 0535 FAC8 D3 5F out (banco),a ; seleziona il banco 0536 FACA 21 00 F0 ld hl,0f000h ; sposta il banco in ram 0537 FACD 01 00 08 ld bc,0800h 0538 FAD0 ED B0 ldir 0539 FAD2 3C inc a 0540 FAD3 3C inc a 0541 FAD4 C1 pop bc 0542 FAD5 10 F0 djnz setban ; decrementa B e looppa se <> 0 0543 FAD7 0544 FAD7 C9 ret 0545 FAD8 0546 FAD8 ;------------------------------------------------------ 0547 FAD8 ; controlla se la scheda video vecchia è presente. Per farlo verifica il cambiamento della ritraccia video 0548 FAD8 ; se la scheda video vecchia esiste ritorna 00h in B' 0549 FAD8 ; se la scheda video vecchia non esiste ritorna FFh in B' 0550 FAD8 0551 FAD8 F5 checv: push af 0552 FAD9 E5 push hl 0553 FADA 0554 FADA D9 exx ; mette 00h in B' 0555 FADB 06 00 ld b,00h 0556 FADD D9 exx 0557 FADE 0558 FADE 21 00 00 ld hl,00000h ; inizializza il contatore 0559 FAE1 0560 FAE1 23 checv1: inc hl ; attende al massimo fino a che HL non diventa 1000h 0561 FAE2 7C ld a,h ; Infatti la ritraccia a "1" come tempo resta al massimo con HL a 0111h 0562 FAE3 FE 10 cp 10h ; Se impiega più tempo significa che la scheda LX.388 non è presente 0563 FAE5 20 06 jr nz,checv2 0564 FAE7 0565 FAE7 D9 exx ; se la LX.388 non è presente carica FF in B' ed esce 0566 FAE8 06 FF ld b,0ffh 0567 FAEA D9 exx 0568 FAEB 18 06 jr checv3 0569 FAED 0570 FAED DB EB checv2: in a,(0ebh) ; controlla se c'è la ritraccia video 0571 FAEF CB 7F bit 7,a 0572 FAF1 20 EE jr nz,checv1 ; ritraccia non trovata, looppa 0573 FAF3 0574 FAF3 E1 checv3: pop hl 0575 FAF4 F1 pop af 0576 FAF5 C9 ret 0577 FAF6 0578 FAF6 ;------------------------------------------------------ 0579 FAF6 ; controlla se è stata rilevata la scheda video vecchia 0580 FAF6 ; ritorna Z a 0 se non c'è, Z a 1 se c'è 0581 FAF6 ; Sporca F 0582 FAF6 0583 FAF6 C5 chect: push bc ; salva il valore di A nel registro B 0584 FAF7 47 ld b,a 0585 FAF8 0586 FAF8 D9 exx ; recupera il valore dal registro B' 0587 FAF9 78 ld a,b 0588 FAFA D9 exx 0589 FAFB B7 or a ; imposta il flag Z 0590 FAFC 0591 FAFC 78 ld a,b ; recupera il valore di A dal registro B 0592 FAFD 0593 FAFD C1 pop bc 0594 FAFE C9 ret 0595 FAFF 0596 FAFF ;------------------------------------------------------ 0597 FAFF ; pulizia del video vecchio 0598 FAFF 0599 FAFF E5 initv: push hl 0600 FB00 D5 push de 0601 FB01 C5 push bc 0602 FB02 21 00 EC ld hl,0ec00h 0603 FB05 11 01 EC ld de,0ec01h 0604 FB08 36 20 ld (hl),20h 0605 FB0A 01 FF 01 ld bc,01ffh 0606 FB0D CD 16 FB call waitv ; attende la ritraccia 0607 FB10 ED B0 ldir 0608 FB12 C1 pop bc 0609 FB13 D1 pop de 0610 FB14 E1 pop hl 0611 FB15 C9 ret 0612 FB16 0613 FB16 ;------------------------------------------------------ 0614 FB16 ; attende la ritraccia del video vecchio 0615 FB16 0616 FB16 F5 waitv: push af 0617 FB17 0618 FB17 CD F6 FA call chect ; esce se non esiste la scheda video vecchia 0619 FB1A 20 06 jr nz,waitv2 0620 FB1C 0621 FB1C DB EB waitv1: in a,(0ebh) ; attende la ritraccia video 0622 FB1E CB 7F bit 7,a 0623 FB20 20 FA jr nz,waitv1 0624 FB22 0625 FB22 F1 waitv2: pop af 0626 FB23 C9 ret 0627 FB24 0628 FB24 ;------------------------------------------------------ 0629 FB24 ; pulizia del video nuovo 0630 FB24 0631 FB24 F5 initn: push af 0632 FB25 E5 push hl 0633 FB26 21 00 00 ld hl,0h 0634 FB29 CD A9 FD initn1: call lf06e ; carica in R18 e R19 l'indirizzo (HL) del carattere da visualizzare 0635 FB2C 0636 FB2C 3E 20 ld a,20h ; imposta il carattere a "blank" 0637 FB2E CD 98 FB call writen ; scrive il carattere 0638 FB31 0639 FB31 23 inc hl 0640 FB32 7D ld a,l 0641 FB33 FE 81 cp 81h 0642 FB35 20 F2 jr nz,initn1 0643 FB37 7C ld a,h 0644 FB38 FE 07 cp 07h 0645 FB3A 20 ED jr nz,initn1 0646 FB3C 0647 FB3C E1 pop hl 0648 FB3D F1 pop af 0649 FB3E C9 ret 0650 FB3F 0651 FB3F ;------------------------------------------------------ 0652 FB3F ; accende o spegne il cursore sul video nuovo 0653 FB3F ; A=00h accende, A=20h spegne 0654 FB3F 0655 FB3F F5 cursor: push af 0656 FB40 0657 FB40 3E 0A ld a,0ah ; seleziona il registro R10 0658 FB42 D3 8C out (8ch),a 0659 FB44 0660 FB44 F1 pop af ; scrive il valore 0661 FB45 D3 8D out (8dh),a 0662 FB47 0663 FB47 C9 ret 0664 FB48 0665 FB48 ;------------------------------------------------------ 0666 FB48 ; Subroutine per la visualizzazione del menù sui video 0667 FB48 ; 0668 FB48 0669 FB48 21 00 F0 vmenu1: ld hl,menu1 ; visualizza la 1° pagina del menu 0670 FB4B D9 exx ; carica in C' il numero della pagina visualizzata 0671 FB4C 0E 01 ld c,01h 0672 FB4E D9 exx 0673 FB4F 18 10 jr vmenuA 0674 FB51 0675 FB51 21 00 F2 vmenu2: ld hl,menu2 ; visualizza la 2° pagina del menu 0676 FB54 D9 exx ; carica in C' il numero della pagina visualizzata 0677 FB55 0E 02 ld c,02h 0678 FB57 D9 exx 0679 FB58 18 07 jr vmenuA 0680 FB5A 0681 FB5A 21 00 F4 vmenu3: ld hl,menu3 ; visualizza la 3° pagina del menu 0682 FB5D D9 exx ; carica in C' il numero della pagina visualizzata 0683 FB5E 0E 03 ld c,03h 0684 FB60 D9 exx 0685 FB61 0686 FB61 CD BB FA vmenuA: call disp1 ; pulisce i video 0687 FB64 0688 FB64 F5 push af 0689 FB65 E5 vmenuB: push hl 0690 FB66 CD C6 FB call nloc ; calcola in DE l'indirizzo del video nuovo in base alla riga/colonna nella locazione puntata da HL e HL+1 0691 FB69 D5 push de 0692 FB6A E1 pop hl 0693 FB6B CD A9 FD call lf06e ; carica in R18 e R19 l'indirizzo (HL) del carattere da visualizzare 0694 FB6E 0695 FB6E E1 pop hl 0696 FB6F CD B4 FB call vloc ; calcola in DE l'indirizzo del video vecchio in base alla riga/colonna nella locazione puntata da HL e HL+1 0697 FB72 0698 FB72 7E vmenuC: ld a,(hl) ; recupera il carattere da scrivere 0699 FB73 CD 16 FB call waitv ; attende la ritraccia del video vecchio 0700 FB76 12 ld (de),a ; visualizza il carattere sul video vecchio 0701 FB77 13 inc de 0702 FB78 0703 FB78 CD 98 FB call writen ; attende la ritraccia e visualizza il carattere sul video nuovo 0704 FB7B 0705 FB7B 23 inc hl 0706 FB7C AF xor a ; controlla se il prossimo carattere è 00h 0707 FB7D BE cp (hl) 0708 FB7E 20 F2 jr nz,vmenuC 0709 FB80 23 inc hl 0710 FB81 2F cpl ; controlla se il prossimo carattere è 0ffh 0711 FB82 BE cp (hl) ; se no, ricarica la successiva prima posizione e looppa 0712 FB83 20 E0 jr nz,vmenuB 0713 FB85 0714 FB85 21 F0 F5 ld hl,curs ; calcola in DE l'indirizzo del cursore in base alla riga/colonna nella locazione puntata da HL e HL+1 0715 FB88 F1 pop af 0716 FB89 F5 push af 0717 FB8A CD C6 FB call nloc 0718 FB8D D5 push de 0719 FB8E E1 pop hl 0720 FB8F CD 99 FD call lf060 ; carica in R14, R15, R18 e R19 l'indirizzo (HL) del cursore e del carattere da visualizzare 0721 FB92 0722 FB92 AF xor a ; accende il cursore sul video nuovo 0723 FB93 CD 3F FB call cursor 0724 FB96 0725 FB96 F1 pop af 0726 FB97 C9 ret 0727 FB98 0728 FB98 ;------------------------------------------------------ 0729 FB98 ; scrive il carattere presente in A sul video nuovo 0730 FB98 ; Con l'entry point write1 non attende la ritraccia 0731 FB98 0732 FB98 CD AB FB writen: call waitn ; attende la ritraccia 0733 FB9B D3 80 write1: out (80h),a ; scrive il carattere 0734 FB9D F5 push af 0735 FB9E 3E 1F ld a,1fh ; imposta gli attributi del carattere 0736 FBA0 D3 8E out (8eh),a 0737 FBA2 3E 1F ld a,31 ; update 0738 FBA4 D3 8C out (8ch),a 0739 FBA6 AF xor a 0740 FBA7 D3 8D out (8dh),a 0741 FBA9 F1 pop af 0742 FBAA C9 ret 0743 FBAB 0744 FBAB ;------------------------------------------------------ 0745 FBAB ; attende la ritraccia del video nuovo 0746 FBAB 0747 FBAB F5 waitn: push af 0748 FBAC 0749 FBAC DB 8C waitn1: in a,(8ch) 0750 FBAE CB 7F bit 7,a 0751 FBB0 28 FA jr z,waitn1 0752 FBB2 F1 pop af 0753 FBB3 C9 ret 0754 FBB4 0755 FBB4 ;------------------------------------------------------ 0756 FBB4 ; Calcola la locazione del video in base alla riga/colonna nella locazione puntata da HL e HL+1 0757 FBB4 ; Chiamare "vloc" per il video vecchio, "nloc" per il video nuovo 0758 FBB4 ; Ritorna DE. HL punterà al primo carattere da visualizzare 0759 FBB4 ; Sporca DE e HL 0760 FBB4 ; Con l'entry-point vloc1 o nloc1 il registro BC deve contenere il valore della riga/colonna. In questo caso HL non viene toccato 0761 FBB4 0762 FBB4 C5 vloc: push bc 0763 FBB5 46 ld b,(hl) ; numero riga 0764 FBB6 23 inc hl 0765 FBB7 4E ld c,(hl) ; numero colonna 0766 FBB8 23 inc hl ; punta al primo carattere del messaggio 0767 FBB9 18 01 jr vloc1a 0768 FBBB 0769 FBBB C5 vloc1: push bc 0770 FBBC F5 vloc1a: push af 0771 FBBD E5 push hl 0772 FBBE 21 00 EC ld hl,0ec00h ; prima locazione del video vecchio 0773 FBC1 11 20 00 ld de,00020h ; numero di caratteri che compongono una riga sul video vecchio 0774 FBC4 18 10 jr loc1 0775 FBC6 0776 FBC6 C5 nloc: push bc 0777 FBC7 46 ld b,(hl) ; numero riga 0778 FBC8 23 inc hl 0779 FBC9 4E ld c,(hl) ; numero colonna 0780 FBCA 23 inc hl ; punta al primo carattere del messaggio 0781 FBCB 18 01 jr nloc1a 0782 FBCD 0783 FBCD C5 nloc1: push bc 0784 FBCE F5 nloc1a: push af 0785 FBCF E5 push hl 0786 FBD0 21 58 01 ld hl,00158h ; indirizzo del primo carattere più offset (0158h) per centrare la videata sul video nuovo 0787 FBD3 11 50 00 ld de,00050h ; numero di caratteri che compongono una riga sul video nuovo 0788 FBD6 0789 FBD6 78 loc1: ld a,b ; aggiunge il numero di caratteri che compongono una riga per tutte le righe richieste 0790 FBD7 B7 or a ; cp 00h 0791 FBD8 28 04 jr z,loc2 0792 FBDA 19 add hl,de ; somma il numero di caratteri 0793 FBDB 05 dec b 0794 FBDC 18 F8 jr loc1 0795 FBDE 0796 FBDE 06 00 loc2: ld b,00h ; aggiunge il numero di caratteri relativi alla colonna richiesta 0797 FBE0 09 add hl,bc 0798 FBE1 EB ex de,hl ; mette il risultato in DE 0799 FBE2 0800 FBE2 E1 pop hl 0801 FBE3 F1 pop af 0802 FBE4 C1 pop bc 0803 FBE5 0804 FBE5 C9 ret 0805 FBE6 0806 FBE6 ;------------------------------------------------------ 0807 FBE6 ; Cerca dove posizionare lo SP prima di C000 0808 FBE6 ; Ritorna l'indirizzo in HL 0809 FBE6 ; 0810 FBE6 21 FF BF stack: ld hl,0bfffh 0811 FBE9 7E spA1: ld a,(hl) 0812 FBEA 2F cpl 0813 FBEB 77 ld (hl),a 0814 FBEC BE cp (hl) 0815 FBED 28 03 jr z,spA3 0816 FBEF 2B spA2: dec hl 0817 FBF0 18 F7 jr spA1 0818 FBF2 2F spA3: cpl 0819 FBF3 77 ld (hl),a 0820 FBF4 BE cp (hl) 0821 FBF5 20 F8 jr nz,spA2 0822 FBF7 0823 FBF7 C9 ret 0824 FBF8 0825 FBF8 ;------------------------------------------------------ 0826 FBF8 ; 0827 FBF8 ; Nuova routine di input tastiera per il monitor esadecimale 0828 FBF8 ; Sostituisce la 80AA e accetta l'input dalla tastiera alfanumerica vecchia o nuova 0829 FBF8 ; o dalla tastiera esadecimale convertendo il valore ricevuto in modo da essere 0830 FBF8 ; compatibile con la 80AA 0831 FBF8 ; 0832 FBF8 ; Dati ricevuti dalla tastiera: 0833 FBF8 ; Numeri da 0 a 9: da 30h a 39h 0834 FBF8 ; Lettere da A ad F: da 61h a 66h 0835 FBF8 ; Shift+numero da 1 a 9: da 21h a 29h 0836 FBF8 ; Shift+lettere da A ad F: da 41h a 46h 0837 FBF8 ; Return: 0dh 0838 FBF8 0839 FBF8 0840 FBF8 C5 input: push bc 0841 FBF9 D5 push de 0842 FBFA E5 push hl 0843 FBFB 0844 FBFB CD F6 FA t1: call chect ; Se non c'è la scheda video vecchia salta il controllo e passa subito alla tastiera nuova 0845 FBFE 20 06 jr nz,t2 0846 FC00 0847 FC00 DB EA t1x: in a,(0eah) ; tastiera vecchia 0848 FC02 CB 7F bit 7,a 0849 FC04 20 FA jr nz,t1x 0850 FC06 0851 FC06 DB 85 t2: in a,(085h) ; tastiera nuova 0852 FC08 CB 7F bit 7,a 0853 FC0A 28 FA jr z,t2 0854 FC0C 21 56 04 t2es1: ld hl,0456h ; tastiera esadecimale 0855 FC0F DB F0 t2es2: in a,(0f0h) 0856 FC11 CB 7F bit 7,a 0857 FC13 28 F7 jr z,t2es1 0858 FC15 2B t2es3: dec hl 0859 FC16 7C ld a,h 0860 FC17 B5 or l 0861 FC18 20 F5 jr nz,t2es2 0862 FC1A 0863 FC1A ; Input da tastiere 0864 FC1A CD F6 FA t2a: call chect ; Se non c'è la scheda video vecchia salta il controllo e passa subito alla tastiera nuova 0865 FC1D 20 06 jr nz,t2ax 0866 FC1F 0867 FC1F DB EA in a,(0eah) ; tastiera vecchia 0868 FC21 CB 7F bit 7,a 0869 FC23 20 38 jr nz,t2b 0870 FC25 0871 FC25 DB 85 t2ax: in a,(085h) ; tastiera nuova 0872 FC27 2F cpl 0873 FC28 CB 7F bit 7,a 0874 FC2A 20 31 jr nz,t2b 0875 FC2C DB F0 in a,(0f0h) ; tastiera esadecimale 0876 FC2E CB 7F bit 7,a 0877 FC30 28 10 jr z,tes4 0878 FC32 18 E6 jr t2a ; se non ho premuto nulla sulle tre tastiere allora looppa 0879 FC34 0880 FC34 ; Input da tastiera esadecimale 0881 FC34 21 56 04 tes1: ld hl,0456h 0882 FC37 0883 FC37 DB F0 tes2: in a,(0f0h) 0884 FC39 CB 7F bit 7,a 0885 FC3B 28 F7 jr z,tes1 0886 FC3D 2B tes3: dec hl 0887 FC3E 7C ld a,h 0888 FC3F B5 or l 0889 FC40 20 F5 jr nz,tes2 0890 FC42 0891 FC42 DB F0 tes4: in a,(0f0h) 0892 FC44 CB 7F bit 7,a 0893 FC46 20 FA jr nz,tes4 0894 FC48 47 ld b,a 0895 FC49 21 05 00 ld hl,0005h 0896 FC4C CD AE FC call rit 0897 FC4F 0898 FC4F DB F0 tes5: in a,(0f0h) 0899 FC51 4F ld c,a 0900 FC52 E6 7F and 7fh 0901 FC54 B8 cp b 0902 FC55 20 F8 jr nz,tes5 0903 FC57 CB 79 bit 7,c 0904 FC59 20 D9 jr nz,tes1 0905 FC5B 0906 FC5B 18 4D tes6: jr texit 0907 FC5D 0908 FC5D ; Conversione dato per tastiere alfanumeriche 0909 FC5D E6 7F t2b: and 7fh 0910 FC5F 0911 FC5F FE 0D cp 0dh ; controlla se è stato premuto RETURN 0912 FC61 20 04 jr nz,t3 0913 FC63 3E 10 ld a,10h ; se si carica il valore di Control+0 0914 FC65 18 43 jr texit 0915 FC67 0916 FC67 47 t3: ld b,a ; salva il registro A 0917 FC68 D9 exx ; recupera il registro D' 0918 FC69 7A ld a,d 0919 FC6A D9 exx 0920 FC6B B7 or a ; cp 00h - Se <> 0 deve controllare anche il BACKSPACE 0921 FC6C 78 ld a,b ; ripristina il registro A 0922 FC6D 28 08 jr z,t3b 0923 FC6F 0924 FC6F FE 08 cp 08h ; controlla se è stato premuto BACKSPACE 0925 FC71 20 04 jr nz,t3b 0926 FC73 3E 1F ld a,01fh ; se si carica il valore 01fh (equivalente a CTRL+F sulla tastiera esadecimale) 0927 FC75 18 33 jr texit 0928 FC77 0929 FC77 FE 3A t3b: cp 03ah ; controlla se è stato premuto un numero 0930 FC79 30 08 jr nc,t4 0931 FC7B FE 30 cp 030h 0932 FC7D 38 04 jr c,t4 0933 FC7F D6 30 sub 030h ; se si sottrae 30h ed esce 0934 FC81 18 27 jr texit 0935 FC83 0936 FC83 FE 67 t4: cp 67h ; controlla se è stata premuta una lettera tra A ed F 0937 FC85 30 08 jr nc,t5 0938 FC87 FE 61 cp 61h 0939 FC89 38 04 jr c,t5 0940 FC8B D6 57 sub 57h ; se si sottrae 57h ed esce 0941 FC8D 18 1B jr texit 0942 FC8F 0943 FC8F FE 2A t5: cp 2ah ; controlla se è stato premuto shift+numero (escluso 0) 0944 FC91 30 08 jr nc,t6 0945 FC93 FE 21 cp 21h 0946 FC95 38 04 jr c,t6 0947 FC97 D6 10 sub 10h ; se si sottrae 10h ed esce 0948 FC99 18 0F jr texit 0949 FC9B 0950 FC9B FE 47 t6: cp 47h ; controlla se è stato premuto shift+lettera da A ad F 0951 FC9D 30 08 jr nc,t7 0952 FC9F FE 41 cp 41h 0953 FCA1 38 04 jr c,t7 0954 FCA3 D6 27 sub 27h ; se si sottrae 27h ed esce 0955 FCA5 18 03 jr texit 0956 FCA7 0957 FCA7 C3 FB FB t7: jp t1 0958 FCAA 0959 FCAA E1 texit: pop hl 0960 FCAB D1 pop de 0961 FCAC C1 pop bc 0962 FCAD C9 ret 0963 FCAE 0964 FCAE ; Genera un ritardo 0965 FCAE 0966 FCAE E5 rit: push hl 0967 FCAF F5 push af 0968 FCB0 0969 FCB0 CD BB FC rit1: call rit2 0970 FCB3 2B dec hl 0971 FCB4 7C ld a,h 0972 FCB5 B5 or l 0973 FCB6 20 F8 jr nz,rit1 0974 FCB8 F1 pop af 0975 FCB9 E1 pop hl 0976 FCBA C9 ret 0977 FCBB 0978 FCBB F5 rit2: push af 0979 FCBC D5 push de 0980 FCBD 11 47 00 ld de,0047h 0981 FCC0 0982 FCC0 1B rit3: dec de 0983 FCC1 7A ld a,d 0984 FCC2 B3 or e 0985 FCC3 20 FB jr nz,rit3 0986 FCC5 D1 pop de 0987 FCC6 F1 pop af 0988 FCC7 C9 ret 0989 FCC8 0990 FCC8 ;------------------------------------------------------ 0991 FCC8 ; 0992 FCC8 ; Nuova routine di output su video per monitor esadecimale 0993 FCC8 ; Sostituisce la 80EC e accetta l'input dalle locazioni da 0000h a 0007h 0994 FCC8 ; convertendo il valore letto in modo da essere compatibile con la 80EC 0995 FCC8 ; Con l'entry point "video1" i registri BC, DE e HL devono essere già impostati 0996 FCC8 ; 0997 FCC8 0998 FCC8 F5 video: push af 0999 FCC9 C5 push bc 1000 FCCA D5 push de 1001 FCCB E5 push hl 1002 FCCC 1003 FCCC 3E 20 ld a,20h ; spegne il cursore sul video nuovo 1004 FCCE CD 3F FB call cursor 1005 FCD1 1006 FCD1 11 07 00 ld de,0007h ; contatore numero di caratteri da visualizzare (indica anche la locazione da cui prelevare il carattere da visualizzare) 1007 FCD4 01 00 EC ld bc,0ec00h ; posizione video vecchio 1008 FCD7 21 00 00 ld hl,0000h ; posizione video nuovo 1009 FCDA 1010 FCDA 3E 20 ld a,20h ; spegne il cursore sul video nuovo 1011 FCDC CD 3F FB call cursor 1012 FCDF 1013 FCDF E5 m1: push hl ; salva la posizione del video nuovo 1014 FCE0 21 22 FD ld hl,tabvid ; calcola il carattere da visualizzare leggendolo dalla tabella di conversione 1015 FCE3 1016 FCE3 C5 push bc 1017 FCE4 1A ld a,(de) ; legge il valore da visualizzare 1018 FCE5 06 00 ld b,0h ; lo converte nel carattere ascii 1019 FCE7 4F ld c,a 1020 FCE8 09 add hl,bc 1021 FCE9 C1 pop bc 1022 FCEA 1023 FCEA 7E ld a,(hl) ; legge dalla tabella il carattere da visualizzare 1024 FCEB 1025 FCEB CD F6 FA call chect ; controlla se esiste la scheda video vecchia 1026 FCEE 20 04 jr nz,m2 ; se non esiste non visualizza il carattere sulla scheda video vecchia 1027 FCF0 1028 FCF0 CD 16 FB call waitv ; attende la ritraccia video vecchio 1029 FCF3 02 ld (bc),a ; visualizza il carattere sul video vecchio 1030 FCF4 1031 FCF4 E1 m2: pop hl ; ripristina la posizione del video nuovo 1032 FCF5 CD 99 FD call lf060 ; carica in R18 e R19 l'indirizzo (HL) del cursore e del carattere da visualizzare 1033 FCF8 CD 98 FB call writen ; visualizza il carattere sul video nuovo 1034 FCFB 1035 FCFB 0C inc c ; incrementa la posizione del video vecchio 1036 FCFC 2C inc l ; incrementa la posizione del video nuovo 1037 FCFD 1D dec e ; decrementa il contatore dei caratteri da visualizzare 1038 FCFE 7B ld a,e ; controlla se ci sono altri caratteri da visualizzare 1039 FCFF FE FF cp 0ffh 1040 FD01 20 DC jr nz,m1 ; looppa se ci sono altri caratteri da visualizzare 1041 FD03 1042 FD03 ;------------------------------------------------------ 1043 FD03 ; Visualizza sui display della tastiera esadecimale 1044 FD03 ;------------------------------------------------------ 1045 FD03 01 F7 00 ld bc,00f7h ; porta di output del display 1046 FD06 11 07 00 ld de,0007h ; valore da visualizzare 1047 FD09 1048 FD09 21 46 FD m3: ld hl,tabdis ; carica l'indirizzo della tabella di conversione in HL 1049 FD0C 1A ld a,(de) ; legge il valore da visualizzare e lo mette in A 1050 FD0D 1051 FD0D C5 push bc ; carica il valore da visualizzare in BC 1052 FD0E 4F ld c,a 1053 FD0F AF xor a 1054 FD10 47 ld b,a 1055 FD11 09 add hl,bc ; HL ora punta all'indirizzo contenente il valore convertito 1056 FD12 C1 pop bc 1057 FD13 1058 FD13 7E ld a,(hl) ; carica il valore convertito in A 1059 FD14 ED 79 out (c),a ; e lo invia al display 1060 FD16 1061 FD16 1D dec e ; decrementa e passa al prossimo display/valore 1062 FD17 0D dec c 1063 FD18 79 ld a,c 1064 FD19 FE EF cp 0efh 1065 FD1B 20 EC jr nz,m3 ; (-16) 1066 FD1D 1067 FD1D E1 pop hl 1068 FD1E D1 pop de 1069 FD1F C1 pop bc 1070 FD20 F1 pop af 1071 FD21 C9 ret 1072 FD22 1073 FD22 1074 FD22 303132333435tabvid: .byte "0123456789ABCDEF" 1074 FD28 36373839414243444546 1075 FD32 2D204D522348 .byte "-", " ", "M", "R", "#", "H", "L", "P", "C", "G" 1075 FD38 4C504347 1076 FD3C 4E5152545556 .byte "NQRTUVJY S" 1076 FD42 4A592053 1077 FD46 1078 FD46 ;------------------------------------------------------ 1079 FD46 ; Tabella caratteri display 1080 FD46 ; Valori per l'accensione dei segmenti del display: 1081 FD46 ; 1082 FD46 ; 1 1083 FD46 ; - bit a 1 spegne il segmento 1084 FD46 ; 32 | | 2 1085 FD46 ; - 64 F0 = display a destra 1086 FD46 ; 16 | | 4 !! 1087 FD46 ; - F7 = display a sinistra 1088 FD46 ; 8 1089 FD46 ; 128 = punto decimale 1090 FD46 ; 1091 FD46 C0 tabdis: .byte 0c0h ;carattere 0 "0" 1092 FD47 F9 .byte 0f9h ;carattere 1 "1" 1093 FD48 A4 .byte 0a4h ;carattere 2 "2" 1094 FD49 B0 .byte 0b0h ;carattere 3 "3" 1095 FD4A 99 .byte 099h ;carattere 4 "4" 1096 FD4B 92 .byte 092h ;carattere 5 "5" o "S" 1097 FD4C 82 .byte 082h ;carattere 6 "6" 1098 FD4D F8 .byte 0f8h ;carattere 7 "7" 1099 FD4E 80 .byte 080h ;carattere 8 "8" 1100 FD4F 90 .byte 090h ;carattere 9 "9" 1101 FD50 88 .byte 088h ;carattere 0A "A" 1102 FD51 83 .byte 083h ;carattere 0B "b" 1103 FD52 C6 .byte 0c6h ;carattere 0C "C" 1104 FD53 A1 .byte 0a1h ;carattere 0d "d" 1105 FD54 86 .byte 086h ;carattere 0E "E" 1106 FD55 8E .byte 08eh ;carattere 0F "F" 1107 FD56 BF .byte 0bfh ;carattere 10 "-" 1108 FD57 FF .byte 0ffh ;carattere 11 " " blank 1109 FD58 AB .byte 0abh ;carattere 12 "n" bassa 1110 FD59 9D .byte 09dh ;carattere 13 "u" alta 1111 FD5A B6 .byte 0b6h ;carattere 14 "3" linee orizzontali" 1112 FD5B 89 .byte 089h ;carattere 15 "H" 1113 FD5C C7 .byte 0c7h ;carattere 16 "L" 1114 FD5D 8C .byte 08ch ;carattere 17 "P" 1115 FD5E A7 .byte 0a7h ;carattere 18 "c" bassa 1116 FD5F C2 .byte 0c2h ;carattere 19 "G" 1117 FD60 C8 .byte 0c8h ;carattere 1A "N" 1118 FD61 98 .byte 098h ;carattere 1B "q" 1119 FD62 AF .byte 0afh ;carattere 1C "r" 1120 FD63 87 .byte 087h ;carattere 1D "t" 1121 FD64 C1 .byte 0c1h ;carattere 1E "U" 1122 FD65 E3 .byte 0e3h ;carattere 1F "u" bassa 1123 FD66 E1 .byte 0e1h ;carattere 20 "J" 1124 FD67 91 .byte 091h ;carattere 21 "Y" 1125 FD68 FF .byte 0ffh ;carattere 22 " " blank 1126 FD69 FF .byte 0ffh ;carattere 23 " " blank 1127 FD6A 1128 FD6A 1129 FD6A ;------------------------------------------------------ 1130 FD6A ; Visualizza un messaggio puntato da HL sui display 1131 FD6A ; Il messaggio da visualizzare deve essere già nel formato compatibile con i caratteri dei display 1132 FD6A ; Il primo byte indica quanti caratteri visualizzare. I rimanenti display vengono messi a FFh (display spento) 1133 FD6A 1134 FD6A F5 vdisp: push af 1135 FD6B C5 push bc 1136 FD6C E5 push hl 1137 FD6D 1138 FD6D 0E F7 ld c,0f7h ; indirizzo del primo display 1139 FD6F 46 ld b,(hl) ; numero di caratteri da visualizzare 1140 FD70 23 inc hl 1141 FD71 1142 FD71 7E vdisp1: ld a,(hl) ; carica il carattere da visualizzare in A 1143 FD72 ED 79 out (c),a ; e lo invia al display 1144 FD74 23 inc hl ; punta al prossimo carattere da visualizzare 1145 FD75 0D dec c ; punta al prossimo display 1146 FD76 10 F9 djnz vdisp1 ; looppa se ci sono altri caratteri da visualizzare 1147 FD78 1148 FD78 79 vdisp2: ld a,c ; se rimangono altri display li spegne 1149 FD79 FE EF cp 0efh 1150 FD7B 28 07 jr z,vdisp3 1151 FD7D 3E FF ld a,0ffh ; spegne il display 1152 FD7F ED 79 out (c),a 1153 FD81 0D dec c ; punta al prossimo display 1154 FD82 18 F4 jr vdisp2 1155 FD84 1156 FD84 E1 vdisp3: pop hl 1157 FD85 C1 pop bc 1158 FD86 F1 pop af 1159 FD87 1160 FD87 C9 ret 1161 FD88 1162 FD88 ;------------------------------------------------------ 1163 FD88 ; Visualizza il carattere contenuto in A sul display puntato da C, convertendolo nel formato compatibile con i caratteri dei display 1164 FD88 1165 FD88 E5 vdispc: push hl 1166 FD89 F5 push af 1167 FD8A C5 push bc 1168 FD8B 1169 FD8B 21 46 FD ld hl,tabdis ; carica l'indirizzo della tabella di conversione in HL 1170 FD8E 4F ld c,a ; carica il valore da visualizzare in BC 1171 FD8F AF xor a 1172 FD90 47 ld b,a 1173 FD91 09 add hl,bc ; HL ora punta all'indirizzo contenente il valore convertito 1174 FD92 7E ld a,(hl) ; carica il valore convertito in A 1175 FD93 1176 FD93 C1 pop bc 1177 FD94 ED 79 out (c),a ; invia il valore convertito al display 1178 FD96 1179 FD96 F1 pop af 1180 FD97 E1 pop hl 1181 FD98 C9 ret 1182 FD99 1183 FD99 ;------------------------------------------------------ 1184 FD99 ; Routine f060h della eprom 2390 (carica in R14, R15, R18 e R19 l'indirizzo (HL) del cursore e del carattere da visualizzare) 1185 FD99 ; Routine f06eh della eprom 2390 (carica in R18 e R19 l'indirizzo (HL) del carattere da visualizzare) 1186 FD99 1187 FD99 F5 lf060: push af 1188 FD9A 3E 0E ld a,0eh ; carica da HL l'indirizzo del cursore 1189 FD9C D3 8C out (8ch),a 1190 FD9E 7C ld a,h 1191 FD9F D3 8D out (8dh),a 1192 FDA1 3E 0F ld a,0fh 1193 FDA3 D3 8C out (8ch),a 1194 FDA5 7D ld a,l 1195 FDA6 D3 8D out (8dh),a 1196 FDA8 F1 pop af 1197 FDA9 1198 FDA9 F5 lf06e: push af 1199 FDAA 3E 12 ld a,12h ; carica da HL l'indirizzo del carattere da visualizzare in R18 e R19 1200 FDAC D3 8C out (8ch),a 1201 FDAE 7C ld a,h 1202 FDAF D3 8D out (8dh),a 1203 FDB1 3E 13 ld a,13h 1204 FDB3 D3 8C out (8ch),a 1205 FDB5 7D ld a,l 1206 FDB6 D3 8D out (8dh),a 1207 FDB8 1208 FDB8 3E 1F ld a,1fh ; accesso a R31 del SY6545 per fare l'update 1209 FDBA D3 8C out (8ch),a 1210 FDBC F1 pop af 1211 FDBD C9 ret 1212 FDBE 1213 FDBE ;------------------------------------------------------ 1214 FDBE ; Routine f0a5h della eprom 2390 (inizializza i registri del SY6545 ed i PIO) 1215 FDBE 1216 FDBE DB 89 lf0a5: in a,(89h) ; setta il video a 80 colonne 1217 FDC0 CB 8F res 1,a 1218 FDC2 21 02 FE ld hl,tabini ; carica in HL l'indirizzo della tabella contenente i parametri di inizializzazione del video nuovo 1219 FDC5 D3 89 out (89h),a 1220 FDC7 3E 8F ld a,8fh ; inizializza i PIO 1221 FDC9 D3 82 out (82h),a ; PIO 0/A (RAM 0) 1222 FDCB D3 86 out (86h),a ; PIO 1/A (RAM 1) 1223 FDCD D3 8A out (8ah),a ; PIO 2/A (RAM 2) 1224 FDCF 3E CF ld a,0cfh 1225 FDD1 D3 83 out (83h),a ; PIO 0/B (stampante) 1226 FDD3 08 ex af,af' 1227 FDD4 AF xor a 1228 FDD5 D3 83 out (83h),a 1229 FDD7 08 ex af,af' 1230 FDD8 D3 87 out (87h),a ; PIO 1/B (tastiera) 1231 FDDA 08 ex af,af' 1232 FDDB 3D dec a 1233 FDDC D3 87 out (87h),a 1234 FDDE 08 ex af,af' 1235 FDDF D3 8B out (8bh),a ; PIO 2/B (busy stampante / controllo 40-80 caratteri) 1236 FDE1 3E F1 ld a,0f1h 1237 FDE3 D3 8B out (8bh),a 1238 FDE5 1239 FDE5 06 0C ld b,0ch ; inizializza i registri del SY6545 da R11 a R0 1240 FDE7 78 lf0ce: ld a,b 1241 FDE8 3D dec a 1242 FDE9 D3 8C out (8ch),a 1243 FDEB 7E ld a,(hl) 1244 FDEC D3 8D out (8dh),a 1245 FDEE 23 inc hl 1246 FDEF 10 F6 djnz lf0ce ; (-10) 1247 FDF1 1248 FDF1 06 08 lf0d8: ld b,08h ; azzera i registri del SY6545 da R19 a R12 1249 FDF3 1250 FDF3 78 lf0da: ld a,b 1251 FDF4 C6 0B add a,0bh 1252 FDF6 D3 8C out (8ch),a 1253 FDF8 AF xor a 1254 FDF9 D3 8D out (8dh),a 1255 FDFB 10 F6 djnz lf0da ; (-10) 1256 FDFD 1257 FDFD 3E 1F lf086: ld a,1fh ; accesso a R31 del SY6545 per fare l'update 1258 FDFF D3 8C out (8ch),a 1259 FE01 C9 ret 1260 FE02 1261 FE02 ;------------------------------------------------------ 1262 FE02 ; Tabella per l'inizializzazione dei registri della scheda video grafica 1263 FE02 1264 FE02 0B000B481818tabini: .byte 0bh, 00h, 0bh, 48h, 18h, 18h, 00h, 1ah, 28h, 57h, 50h, 6fh 1264 FE08 001A2857506F 1265 FE0E 1266 FE0E ;------------------------------------------------------ 1267 FE0E ; Calcola l'indirizzo della tabella TABDIS e lo ritorna in HL 1268 FE0E 1269 FE0E 21 46 FD ctabdi: ld hl,tabdis 1270 FE11 C9 ret 1271 FE12 1272 FE12 ;------------------------------------------------------ 1273 FE12 ; Jump table per il richiamo della routine di gestione della voce di menu selezionata 1274 FE12 1275 FE12 0F F9 tabtas: .dw tast1 1276 FE14 1C F9 .dw tast2 1277 FE16 29 F9 .dw tast3 1278 FE18 36 F9 .dw tast4 1279 FE1A 43 F9 .dw tast5 1280 FE1C 56 F9 .dw tast6 1281 FE1E 66 F9 .dw tast7 1282 FE20 76 F9 .dw tast8 1283 FE22 80 F9 .dw tast9 1284 FE24 8A F9 .dw tastA 1285 FE26 97 F9 .dw tastB 1286 FE28 B1 F9 .dw tastC 1287 FE2A BE F9 .dw tastD 1288 FE2C 1C FA .dw tastE 1289 FE2E 40 FA .dw tastF 1290 FE30 2D FA .dw tast10 1291 FE32 4D FA .dw tastS1 1292 FE34 5A FA .dw tastS2 1293 FE36 7A FA .dw tastS3 1294 FE38 1295 FE38 ;------------------------------------------------------ 1296 FE38 ; Jump table per il richiamo della routine di visualizzazione della pagina di menù 1297 FE38 1298 FE38 48 FB tabmen: .dw vmenu1 1299 FE3A 51 FB .dw vmenu2 1300 FE3C 5A FB .dw vmenu3 1301 FE3E 1302 FE3E ;------------------------------------------------------ 1303 FE3E ; Messaggi utilizzati dalla funzione "D" del menù 1304 FE3E 1305 FE3E 000042414E43msgban: .byte 000h, 000h, "BANCO: ", 000h, 0ff 1305 FE44 4F3A2000A5 1306 FE49 0100494E4449msgadr: .byte 001h, 000h, "INDIRIZZO: ", 000h, 0ffh 1306 FE4F 52495A5A4F3A2000FF 1307 FE58 1308 FE58 ;------------------------------------------------------ 1309 FE58 ; Tabelle per visualizzazione su display tastiera esadecimale 1310 FE58 ; 1311 FE58 ; 1312 FE58 ; Valori per l'accensione dei segmenti del display: 1313 FE58 ; 1314 FE58 ; 1 1315 FE58 ; - bit a 1 spegne il segmento 1316 FE58 ; 32 | | 2 1317 FE58 ; - 64 F0 = display a destra 1318 FE58 ; 16 | | 4 !! 1319 FE58 ; - F7 = display a sinistra 1320 FE58 ; 8 1321 FE58 ; 128 = punto decimale 1322 FE58 ; 1323 FE58 ; Fare la somma dei valori e poi complementare il risultato 1324 FE58 ; 1325 FE58 ;------------------------------------------------------ 1326 FE58 ; Messaggi da visualizzare sui display 1327 FE58 1328 FE58 07FF9286C786out0: .byte 07h, 0FFh, 092h, 086h, 0C7h, 086h, 0C6h, 087h ; select 1328 FE5E C687 1329 FE60 08AB86A1C092out1: .byte 08h, 0ABh, 086h, 0A1h, 0C0h, 092h, 0FFh, 079h, 092h ; nedos 1.5 1329 FE66 FF7992 1330 FE69 08AB86A1C092out2: .byte 08h, 0ABh, 086h, 0A1h, 0C0h, 092h, 0FFh, 042h, 0F9h ; nedos G.1 1330 FE6F FF42F9 1331 FE72 08838892F9C6out3: .byte 08h, 083h, 088h, 092h, 0F9h, 0C6h, 0FFh, 0F9h, 082h ; basic 16 1331 FE78 FFF982 1332 FE7B 07C8C0ABF987out4: .byte 07h, 0C8h, 0C0h, 0ABh, 0F9h, 087h, 0C0h, 0AFh ; monitor (non utilizzato) 1332 FE81 C0AF 1333 FE83 06FFFF83C0C0out5: .byte 06h, 0FFh, 0FFh, 083h, 0C0h, 0C0h, 087h ; boot 1333 FE89 87 1334 FE8A 06FFFF878692out6: .byte 06h, 0FFh, 0FFh, 087h, 086h, 092h, 087h ; test 1334 FE90 87 1335 FE91 04C19286AF out7: .byte 04h, 0C1h, 092h, 086h, 0AFh ; user 1336 FE96 08838892F9C6out8: .byte 08h, 083h, 088h, 092h, 0F9h, 0C6h, 0FFh, 012h, 092h ; basic 5.5 1336 FE9C FF1292 1337 FE9F 06FFFF92C0ABout9: .byte 06h, 0FFh, 0FFh, 092h, 0C0h, 0ABh, 086h ; sone 1337 FEA5 86 1338 FEA6 07FF8EC7C08Cout10: .byte 07h, 0FFh, 08Eh, 0C7h, 0C0h, 08Ch, 08Ch, 091h ; floppy 1338 FEAC 8C91 1339 FEAE 0887869287FFout11: .byte 08h, 087h, 086h, 092h, 087h, 0FFh, 0AFh, 088h, 0C8h ; test ram 1339 FEB4 AF88C8 1340 FEB7 08838892F946out12: .byte 08h, 083h, 088h, 092h, 0F9h, 046h, 088h, 0C2h, 099h ; basic.ag4 1340 FEBD 88C299 1341 FEC0 08A1F9928812out13: .byte 08h, 0A1h, 0F9h, 092h, 088h, 012h, 088h, 0C2h, 0B0h ; disas.ag3 1341 FEC6 88C2B0 1342 FEC9 058388ABC640outban: .byte 05h, 083h, 088h, 0ABh, 0C6h, 040h ; banco. 1343 FECF 03 F9 AB 21 outadr: .byte 03h, 0F9h, 0ABh, 021h ; ind. 1344 FED3 1345 FED3 ;------------------------------------------------------ 1346 FED3 1347 FFFF .org 0ffffh 1348 FFFF 00 .byte 00h 1349 10000 1350 10000 .end Type Key: N=NULL_SEG C=CODE_SEG B=BIT_SEG X=EXTD_SEG D=DATA_SEG L=Local E=Export Value Type Label ----- ---- ------------------------------ 005F N banco F5F0 N curs 00FC N cursd FA91 N convnu FA9C N convn1 FAA2 N convn2 FAD8 N checv FAE1 N checv1 FAED N checv2 FAF3 N checv3 FAF6 N chect FB3F N cursor FE0E N ctabdi FAB8 N disp FABB N disp1 F000 N inizio F006 N inp FAFF N initv FB24 N initn FB29 N initn1 FBF8 N input FBD6 N loc1 FBDE N loc2 FD99 N lf060 FDA9 N lf06e FDBE N lf0a5 FDE7 N lf0ce FDF1 N lf0d8 FDF3 N lf0da FDFD N lf086 F000 N menu1 F200 N menu2 F400 N menu3 FCDF N m1 FCF4 N m2 FD09 N m3 FE3E N msgban FE49 N msgadr FBC6 N nloc FBCD N nloc1 FBCE N nloc1a FE58 N out0 FE60 N out1 FE69 N out2 FE72 N out3 FE7B N out4 FE83 N out5 FE8A N out6 FE91 N out7 FE96 N out8 FE9F N out9 FEA6 N out10 FEAE N out11 FEB7 N out12 FEC0 N out13 FEC9 N outban FECF N outadr FAA7 N punt FCAE N rit FCB0 N rit1 FCBB N rit2 FCC0 N rit3 F842 N start F8B0 N sp0 F8B3 N sp1 F8B9 N sp2 F8BC N sp3 FAC7 N setban FBE6 N stack FBE9 N spA1 FBEF N spA2 FBF2 N spA3 F85B N tram1 F85E N tram2 F86D N tram2a F878 N tram3 F882 N tram4 F88F N tram5 F895 N tram6 F89B N tram7 F8AC N tram8 F8C9 N tast0 F8D2 N tast0a F8F6 N tast0b F908 N tast0c F90F N tast1 F91C N tast2 F929 N tast3 F936 N tast4 F943 N tast5 F956 N tast6 F966 N tast7 F976 N tast8 F980 N tast9 F98A N tastA F997 N tastB F9B1 N tastC F9BE N tastD FA1C N tastE FA2D N tast10 FA37 N tast1a FA40 N tastF FA4D N tastS1 FA5A N tastS2 FA7A N tastS3 FBFB N t1 FC00 N t1x FC06 N t2 FC0C N t2es1 FC0F N t2es2 FC15 N t2es3 FC1A N t2a FC25 N t2ax FC34 N tes1 FC37 N tes2 FC3D N tes3 FC42 N tes4 FC4F N tes5 FC5B N tes6 FC5D N t2b FC67 N t3 FC77 N t3b FC83 N t4 FC8F N t5 FC9B N t6 FCA7 N t7 FCAA N texit FD22 N tabvid FD46 N tabdis FE02 N tabini FE12 N tabtas FE38 N tabmen F003 N vis FB48 N vmenu1 FB51 N vmenu2 FB5A N vmenu3 FB61 N vmenuA FB65 N vmenuB FB72 N vmenuC FBB4 N vloc FBBB N vloc1 FBBC N vloc1a FCC8 N video FD6A N vdisp FD71 N vdisp1 FD78 N vdisp2 FD84 N vdisp3 FD88 N vdispc FB16 N waitv FB1C N waitv1 FB22 N waitv2 FB98 N writen FB9B N write1 FBAB N waitn FBAC N waitn1 ADDR 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ----------------------------------------------------- F800 C3 42 F8 C3 F8 FB C3 C8 FC C3 BE FD C3 99 FD C3 F810 A9 FD C3 D8 FA C3 F6 FA C3 16 FB C3 AB FB C3 98 F820 FB C3 3F FB C3 B4 FB C3 C6 FB C3 BB FB C3 CD FB F830 C3 FF FA C3 24 FB C3 0E FE C3 6A FD C3 88 FD C3 F840 9B FB F3 21 ED 45 22 66 00 AF D3 D6 D9 57 D9 3E F850 28 D3 5F 3E CF D3 87 AF 3D D3 87 21 00 00 23 7C F860 FE 10 28 14 DB EB CB 7F 20 F4 21 00 30 2B 7C B5 F870 20 FB DB EA CB 7F 20 17 DB 85 2F CB 7F 20 10 01 F880 FF 01 DB F0 CB 7F 28 24 0B 78 B1 20 F5 18 21 E6 F890 7F FE 1B 20 1B 21 AE FE 01 F7 08 7E ED 79 23 0D F8A0 05 AF B8 20 F6 3E 26 D3 5F C3 00 F0 FE 1F 28 E5 F8B0 21 FF EB 7E 2F 77 BE 28 03 2B 18 F7 2F 77 BE 20 F8C0 F8 2B F9 CD BE FD CD D8 FA 21 58 FE CD 6A FD CD F8D0 48 FB CD F8 FB F5 FE 10 28 2E FE 14 30 F4 FE 01 F8E0 38 F0 21 F0 F5 CD B4 FB FE 11 CD 91 FA 30 07 7D F8F0 12 CD 98 FB 18 12 7C 12 CD 98 FB 13 7D 12 CD 98 F900 FB 13 3E 3C 12 CD 98 FB F1 21 12 FE C3 A7 FA 21 F910 96 FE CD B8 FA 3E 19 D3 5F C3 00 F0 21 60 FE CD F920 B8 FA 3E 00 D3 5F C3 00 F0 21 69 FE CD B8 FA 3E F930 01 D3 5F C3 00 F0 21 9F FE CD B8 FA 3E 1A D3 5F F940 C3 00 F0 21 72 FE CD B8 FA 3E 08 11 00 00 06 08 F950 CD C7 FA C3 00 00 CD BB FA 3E 04 11 00 80 06 01 F960 CD C7 FA C3 00 80 CD BB FA 3E 20 11 00 80 06 01 F970 CD C7 FA C3 00 80 CD BB FA 3E 1C D3 5F C3 00 F0 F980 CD BB FA 3E 1E D3 5F C3 00 F0 21 83 FE CD B8 FA F990 3E 06 D3 5F C3 7D F1 CD BB FA 3E 04 11 00 80 06 F9A0 01 CD C7 FA 3E 18 11 00 00 06 01 CD C7 FA C3 69 F9B0 00 21 8A FE CD B8 FA 3E 24 D3 5F C3 00 F0 3E 01 F9C0 D9 57 D9 3E 20 CD 3F FB CD FF FA CD 24 FB 3E 26 F9D0 D3 5F 21 3E FE 11 C9 FE CD 03 F0 3E F1 32 FC 00 F9E0 16 02 CD 06 F0 E5 21 49 FE 11 CF FE CD 03 F0 3E F9F0 F3 32 FC 00 16 04 CD 06 F0 D1 E5 21 91 FE CD B8 FA00 FA 7B CB 3F CB 3F CB 3F CB 3F 0E F2 CD 88 FD 7B FA10 E6 0F 0E F1 CD 88 FD 7B D3 5F E1 E9 3E 07 11 70 FA20 00 06 01 CD C7 FA 3E 28 D3 5F C3 C9 F8 D9 79 D9 FA30 3C FE 04 38 02 3E 01 21 38 FE CD A7 FA C3 D2 F8 FA40 21 A6 FE CD B8 FA 3E 22 D3 5F C3 00 F0 21 AE FE FA50 CD B8 FA 3E 26 D3 5F C3 00 F0 21 B7 FE CD B8 FA FA60 CD E6 FB F9 3E 2A 11 00 C0 06 04 CD C7 FA 3E C3 FA70 32 66 00 3E 19 D3 5F C3 40 DF 21 C0 FE CD B8 FA FA80 CD E6 FB F9 3E 32 11 00 D0 06 02 CD C7 FA C3 00 FA90 D0 26 20 F5 FE 10 38 04 26 53 D6 10 FE 0A 38 02 FAA0 C6 07 C6 30 6F F1 C9 F5 C5 3D CB 27 4F AF 47 09 FAB0 4E 23 46 C5 E1 C1 F1 E9 CD 6A FD 3E 20 CD 3F FB FAC0 CD FF FA CD 24 FB C9 C5 D3 5F 21 00 F0 01 00 08 FAD0 ED B0 3C 3C C1 10 F0 C9 F5 E5 D9 06 00 D9 21 00 FAE0 00 23 7C FE 10 20 06 D9 06 FF D9 18 06 DB EB CB FAF0 7F 20 EE E1 F1 C9 C5 47 D9 78 D9 B7 78 C1 C9 E5 FB00 D5 C5 21 00 EC 11 01 EC 36 20 01 FF 01 CD 16 FB FB10 ED B0 C1 D1 E1 C9 F5 CD F6 FA 20 06 DB EB CB 7F FB20 20 FA F1 C9 F5 E5 21 00 00 CD A9 FD 3E 20 CD 98 FB30 FB 23 7D FE 81 20 F2 7C FE 07 20 ED E1 F1 C9 F5 FB40 3E 0A D3 8C F1 D3 8D C9 21 00 F0 D9 0E 01 D9 18 FB50 10 21 00 F2 D9 0E 02 D9 18 07 21 00 F4 D9 0E 03 FB60 D9 CD BB FA F5 E5 CD C6 FB D5 E1 CD A9 FD E1 CD FB70 B4 FB 7E CD 16 FB 12 13 CD 98 FB 23 AF BE 20 F2 FB80 23 2F BE 20 E0 21 F0 F5 F1 F5 CD C6 FB D5 E1 CD FB90 99 FD AF CD 3F FB F1 C9 CD AB FB D3 80 F5 3E 1F FBA0 D3 8E 3E 1F D3 8C AF D3 8D F1 C9 F5 DB 8C CB 7F FBB0 28 FA F1 C9 C5 46 23 4E 23 18 01 C5 F5 E5 21 00 FBC0 EC 11 20 00 18 10 C5 46 23 4E 23 18 01 C5 F5 E5 FBD0 21 58 01 11 50 00 78 B7 28 04 19 05 18 F8 06 00 FBE0 09 EB E1 F1 C1 C9 21 FF BF 7E 2F 77 BE 28 03 2B FBF0 18 F7 2F 77 BE 20 F8 C9 C5 D5 E5 CD F6 FA 20 06 FC00 DB EA CB 7F 20 FA DB 85 CB 7F 28 FA 21 56 04 DB FC10 F0 CB 7F 28 F7 2B 7C B5 20 F5 CD F6 FA 20 06 DB FC20 EA CB 7F 20 38 DB 85 2F CB 7F 20 31 DB F0 CB 7F FC30 28 10 18 E6 21 56 04 DB F0 CB 7F 28 F7 2B 7C B5 FC40 20 F5 DB F0 CB 7F 20 FA 47 21 05 00 CD AE FC DB FC50 F0 4F E6 7F B8 20 F8 CB 79 20 D9 18 4D E6 7F FE FC60 0D 20 04 3E 10 18 43 47 D9 7A D9 B7 78 28 08 FE FC70 08 20 04 3E 1F 18 33 FE 3A 30 08 FE 30 38 04 D6 FC80 30 18 27 FE 67 30 08 FE 61 38 04 D6 57 18 1B FE FC90 2A 30 08 FE 21 38 04 D6 10 18 0F FE 47 30 08 FE FCA0 41 38 04 D6 27 18 03 C3 FB FB E1 D1 C1 C9 E5 F5 FCB0 CD BB FC 2B 7C B5 20 F8 F1 E1 C9 F5 D5 11 47 00 FCC0 1B 7A B3 20 FB D1 F1 C9 F5 C5 D5 E5 3E 20 CD 3F FCD0 FB 11 07 00 01 00 EC 21 00 00 3E 20 CD 3F FB E5 FCE0 21 22 FD C5 1A 06 00 4F 09 C1 7E CD F6 FA 20 04 FCF0 CD 16 FB 02 E1 CD 99 FD CD 98 FB 0C 2C 1D 7B FE FD00 FF 20 DC 01 F7 00 11 07 00 21 46 FD 1A C5 4F AF FD10 47 09 C1 7E ED 79 1D 0D 79 FE EF 20 EC E1 D1 C1 FD20 F1 C9 30 31 32 33 34 35 36 37 38 39 41 42 43 44 FD30 45 46 2D 20 4D 52 23 48 4C 50 43 47 4E 51 52 54 FD40 55 56 4A 59 20 53 C0 F9 A4 B0 99 92 82 F8 80 90 FD50 88 83 C6 A1 86 8E BF FF AB 9D B6 89 C7 8C A7 C2 FD60 C8 98 AF 87 C1 E3 E1 91 FF FF F5 C5 E5 0E F7 46 FD70 23 7E ED 79 23 0D 10 F9 79 FE EF 28 07 3E FF ED FD80 79 0D 18 F4 E1 C1 F1 C9 E5 F5 C5 21 46 FD 4F AF FD90 47 09 7E C1 ED 79 F1 E1 C9 F5 3E 0E D3 8C 7C D3 FDA0 8D 3E 0F D3 8C 7D D3 8D F1 F5 3E 12 D3 8C 7C D3 FDB0 8D 3E 13 D3 8C 7D D3 8D 3E 1F D3 8C F1 C9 DB 89 FDC0 CB 8F 21 02 FE D3 89 3E 8F D3 82 D3 86 D3 8A 3E FDD0 CF D3 83 08 AF D3 83 08 D3 87 08 3D D3 87 08 D3 FDE0 8B 3E F1 D3 8B 06 0C 78 3D D3 8C 7E D3 8D 23 10 FDF0 F6 06 08 78 C6 0B D3 8C AF D3 8D 10 F6 3E 1F D3 FE00 8C C9 0B 00 0B 48 18 18 00 1A 28 57 50 6F 21 46 FE10 FD C9 0F F9 1C F9 29 F9 36 F9 43 F9 56 F9 66 F9 FE20 76 F9 80 F9 8A F9 97 F9 B1 F9 BE F9 1C FA 40 FA FE30 2D FA 4D FA 5A FA 7A FA 48 FB 51 FB 5A FB 00 00 FE40 42 41 4E 43 4F 3A 20 00 A5 01 00 49 4E 44 49 52 FE50 49 5A 5A 4F 3A 20 00 FF 07 FF 92 86 C7 86 C6 87 FE60 08 AB 86 A1 C0 92 FF 79 92 08 AB 86 A1 C0 92 FF FE70 42 F9 08 83 88 92 F9 C6 FF F9 82 07 C8 C0 AB F9 FE80 87 C0 AF 06 FF FF 83 C0 C0 87 06 FF FF 87 86 92 FE90 87 04 C1 92 86 AF 08 83 88 92 F9 C6 FF 12 92 06 FEA0 FF FF 92 C0 AB 86 07 FF 8E C7 C0 8C 8C 91 08 87 FEB0 86 92 87 FF AF 88 C8 08 83 88 92 F9 46 88 C2 99 FEC0 08 A1 F9 92 88 12 88 C2 B0 05 83 88 AB C6 40 03 FED0 F9 AB 21 00 00 00 00 00 00 00 00 00 00 00 00 00 FEE0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FEF0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF70 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF90 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FFA0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FFB0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FFC0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FFD0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FFE0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FFF0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 tasm: Number of errors = 0